package actions;

import java.io.File;
import java.io.IOException;

import model.VadeMecumMultimedia;

import org.apache.commons.io.FileUtils;

import persistence.VadeMecumMultimediaDAO;

import com.opensymphony.xwork2.ActionSupport;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;

public class FileUploadAction extends ActionSupport {

	
	
	private static final long serialVersionUID = 1L;

	private final String fileSeparator = System.getProperty("file.separator");
		
	private final String localToUpload = "/tmp/upload/files"; //TODO implementar classe de constantes
	
	private final String localToContexts = "/tmp/upload/contexts";
	
	/**
	 * O arquivo recebido
	 */
	private File upload;
			
	

	/**
	 * O nome do arquivo como sera armazenado no servidor
	 */
	private String fileName; //TODO talvez seja melhor pegar o nome original automaticamente
	
	
	
	/**
	 * O arquivo XML representando o contexto associado ao arquivo
	 */
	private String metadata; 
	

	
	/**
	 * As coordenadas X e Y da localização relacionada ao arquivo separadas por ponto-e-virgula
	 */
	private String location;
	
	//Essa propriedade eh para a US06
//	private String owner; //dono do arquivo (pessoa que adiciona ao servico)
		
	public String execute() throws Exception {

		try {
			String fileUrl = localToUpload + fileSeparator + fileName;					
			
			File theFile = new File(fileUrl);												
			FileUtils.copyFile(upload, theFile);
			
			
			//TODO Falta ver se o contexto foi informado e se foi, armazenar na tabela o contexto tb!!			
			//TODO Falta colocar o dono do arquivo na tabela tb!!
						
//			String fileContextUrl = null;
//			if (fileContext != null){
//				fileContextUrl = localToContexts + fileSeparator + "context" + fileName + ".xml";
//				File contextCopy = new File(fileContextUrl);
//				FileUtils.copyFile(fileContext, contextCopy);
//				System.out.println("Context already copied");
//			}
			
			//pegando as tags
			
			//succeeded
			//pegando as coordenadas
			Point locationPoint = null;
			if (location!=null && !"".equals(location)){
				String[] coordinates = location.split(";");			
				int x = Integer.parseInt(coordinates[0]);
				int y = Integer.parseInt(coordinates[1]);
				locationPoint = new Point(new CoordinateArraySequence(new Coordinate[]{new Coordinate(x, y)}), new GeometryFactory());
			}
			
//			VadeMecumMultimedia fileToBD = new VadeMecumMultimedia(fileUrl, metadata, locationPoint);
//			VadeMecumMultimediaDAO.getInstance().saveOrUpdate(fileToBD);
		} catch (IOException ioe) {
			System.err.println("Erro ao salvar o arquivo");
			ioe.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
			addActionError(e.getMessage());
			return INPUT;
		}

		return SUCCESS;
	}	
	
	
	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public File getUpload() {
		return upload;
	}
	
	public void setUpload(File upload) {
		this.upload = upload;
	}

		
	public String getMetadata() {
		return metadata;
	}

	public void setMetadata(String metadata) {
		this.metadata = metadata;
	}

	
	public String getLocation() {
		return location;
	}
	
	public void setLocation(String location) {
		this.location = location;
	}
}